﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CCPnuts.Pack;

namespace CCPnuts.ISkyDiskFileSystem.Interfaces
{
    /// <summary>
    /// the class represent the sky file system element
    /// </summary>
    public interface I_SkyElement : I_Interface
    {
        #region Essential Members

        /// <summary>
        /// gets or sets element name
        /// </summary>
        string Name { get; set; }

        /// <summary>
        /// gets the parent of this element
        /// </summary>
        I_SkyElementContainer Parent { get; }

        /// <summary>
        /// copy this element to the target directory
        /// </summary>
        /// <param name="tarDir"></param>
        void CopyTo(I_SkyElementContainer tarDir);

        /// <summary>
        /// Download this element.
        /// </summary>
        /// <param name="targetPath"></param>
        /// <returns></returns>
        I_Downloader Download(string targetPath);

        #endregion

        #region Optional Members

        /// <summary>
        /// [Optional]move this element to the target directory.
        /// </summary>
        /// <param name="tarDir"></param>
        [Optional]
        void MoveTo(I_SkyElementContainer tarDir);

        #endregion
    }
}
